# -*- encoding: utf-8 -*-
# customPublish parser
# http://www.alta.kommune.no/postjournal-for-04-10-2007.542266.html
# http://www.kvalsund.kommune.no/postjournal-for-27-09-2007.540522-48819.html
############################################################################
#    Copyright (C) 2007 by Håvard Gulldahl                                 #
#    havard@gulldahl.no                                                    #
#                                                                          #
#    This program is free software; you can redistribute it and#or modify  #
#    it under the terms of the GNU General Public License as published by  #
#    the Free Software Foundation; either version 2 of the License, or     #
#    (at your option) any later version.                                   #
#                                                                          #
#    This program is distributed in the hope that it will be useful,       #
#    but WITHOUT ANY WARRANTY; without even the implied warranty of        #
#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         #
#    GNU General Public License for more details.                          #
#                                                                          #
#    You should have received a copy of the GNU General Public License     #
#    along with this program; if not, write to the                         #
#    Free Software Foundation, Inc.,                                       #
#    59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             #
############################################################################

import logging, re, urlparse
import datetime
from time import strptime, strftime
import BeautifulSoup
import jeje, jeje.parser

class parser(jeje.parser.ejeje_parser):
    def parse_enkeltjournal(self, suppe, uri):
        #jeje.parser.ejeje_parser.__init__(self, suppe, postjournal_samling)
        logging.info('starter customPublish-parser')

        d = suppe.find(text=re.compile('Postjournal for ')).strip()
        dato = d[len('Postjournal for '):]
        #dato = suppe.find('h2', 'subheadline').string[len('POSTJOURNAL-'):]
        logging.debug('fant dato %s', dato)
        self.sett_info(dato)
        logging.debug('finner tittelposter i suppa')
        try:
            _tittelposter = suppe.find('div', 'body').table.findAll('tr')
        except AttributeError: # kvalsund har annen layout
            _tittelposter = suppe.find('td', 'ingress').table.findAll('tr')
        logging.debug('fant %d titler', len(_tittelposter)/6)
        i = 0
#        jeje.debug = _tittelposter
        while len(_tittelposter) > 0:
            __saksnr, _dokumentdato = [ x.string for x in _tittelposter.pop(0).findAll('td') ]
            __arkivsaksnr, _type = unicode(__saksnr).split()
            _arkivsaksnr, _dokumentnr = __arkivsaksnr.split('-')
            _saksbehandler = _tittelposter.pop(0).td.string
            try:
                # noen, bla. alta har saksbehandlere i navn/org -form
                _beh_org, _beh_navn = unicode(_saksbehandler).split('/')
            except ValueError:
                # andre, bla. skjervøy, har saksbehandlere slik: navn (org)
                _beh_navn, _beh_org = re.match(r'([^\(]+)\(([^\)]+)', unicode(_saksbehandler)).groups()
            _adressat = _tittelposter.pop(0).td.string
            _sak = _tittelposter.pop(0).td.string
            _t = _tittelposter.pop(0).td
            if _t.string is not None:
                _tittel = _t.string
            else:
                _tittel = _t.find(text=True)
            _linje = _tittelposter.pop(0)
            try:
                th_lovref, _lovref = [ l.string for l in _linje.findAll() ]
                #logging.debug('lovref: %s -> %s', repr(th_lovref), _lovref)
                assert 'UOff:' in th_lovref
                __skille = _tittelposter.pop(0)
            except TypeError:
                _lovref = False
            except:
                raise

            logging.debug('arbeider med post #%d: %s', i+1, _tittel)

            post = self.legg_til_post()
            post.sett_tittel(unicode(_tittel))
            #logging.debug('arkivsaksnr: %s', _arkivsaksnr)
            post.sett_arkivsaksnr(unicode(_arkivsaksnr))
            post.sett_dokumentnr(unicode(_dokumentnr))
            if u'Unntatt offentlighet' in unicode(_adressat): #Til-feltet er maskert med lovreferanse
                post.sett_offentlig(False)
                post.sett_lovreferanse(unicode(_adressat))
                post.sett_adressat(u'****')
            else: # 
                post.sett_adressat(unicode(_adressat))
            person = post.sett_saksbehandler(unicode(_beh_navn))
            avdeling =  person.sett_organisasjon(unicode(_beh_org))
            avdeling.type = u'avdeling'
            avdeling.moder_id = self.enkeltjournal.postjournal.organisasjon_id
            post.sett_dokumentdato(datetime.datetime(*strptime(unicode(_dokumentdato), '%Y-%m-%d')[0:6]))
            if _lovref:
                post.sett_offentlig(False)
                post.sett_lovreferanse(_lovref)
            #post.sett_sett_refnr(uri.split('&JP_ID=')[1])
            post.sett_retning(unicode(_type))
            post.sett_sakskompleks(unicode(_sak))
            post.kontroller_felter()
            i += 1
        return self.journalposter

    def finn_enkeltjournal_uri(self, postjournal, suppe, dato=None):
        if dato is None:
            dato = self.delta_arbeidsdager(postjournal.etterslep)
        else:
            assert(isinstance(dato, datetime.date))
        href = re.compile(strftime(postjournal.enkeltjournal_uri, dato.timetuple()))
        lenke = suppe.find(name='a', attrs={'href':href})
        logging.debug('fant lenke %s', lenke)
        if not lenke: # fant ikke lenken
            raise jeje.parser.ParseError("Kunne ikke finne lenke for dato: %s" % dato)
            
        protokoll, server, path = urlparse.urlparse(postjournal.uri)[:3]
        sep = ''
        if not lenke['href'][0] == '/': # skråstrek mangler i url-en
            sep = '/'
        return u'%s://%s%s%s' % (protokoll, server, sep, lenke['href']), dato

        
